// 导入路由
import router from "@/router/index";

// 导入vuex
import store from "@/store/index";

// 设置白名单
const WHITE_LIST = ["/login", "/404"];

// 导入进度条
import Nprogress from "nprogress";
import "nprogress/nprogress.css";

// 导入提示
import { Message } from "element-ui";

// 设置导航前置守卫
router.beforeEach(async (to, from, next) => {
  // 点击登录后开启进度条
  Nprogress.start();
  // 取出vuex中的token
  const token = store.state.user.token;
  // 判断没有token
  if (!token) {
    // 把去哪的值取出来
    const path = to.path;
    // 判断去的路由在不在白名单中
    if (WHITE_LIST.includes(path)) {
      // 在就直接放行结束后面的代码
      return next();
    } else {
      Message({ message: "还没有登录哦老板!", type: "warning" });
      // 当要访问其它页面时没有登录会调回登录页，然后点击登录时跳转到刚刚要访问的页面
      return next(`/login?_redirect=${path}`);
    }
    // 有token
  } else {
    // 取出去的路由
    const path = to.path;
    // 判断去的路由是不是登录页
    if (path === "/login") {
      // 解决跳转登录页时候的进度条bug
      Nprogress.done();
      // 是登录页就打回首页
      return next("/");
    } else {
      // 获取到用户信息
      const username = store.getters.username;
      // 判断如果有用户信息
      if (username) {
        // 直接放行
        return next();
      } else {
        // 没有用户信息调用user中的方法getUserInfo发送请求
        const userObj = await store.dispatch("user/getUserInfo");
        // 获取权限标识
        const menus = userObj.roles.menus;
        // 获取用户路由
        const newRoutes = await store.dispatch("permission/getRoutes", menus);
        // 将权限路由添加到项目的路由对象中
        router.addRoutes([...newRoutes,{ path: "*", redirect: "/404", hidden: true }]);
        // 然后放行
        return next(to.path);
      }
    }
  }
});

// 设置导航后置守卫
router.afterEach((to, from) => {
  // to去哪个路由
  // from从哪个路由来

  // 关闭进度条
  Nprogress.done();
});
